/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.Listas;
import Modelo.Socio;
import Modelo.UnidadT;
import Vista.JFrameUnidadT;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;

/**
 *
 * @author Celeron
 */
public class ControladorUnidadT implements ActionListener, KeyListener {

    private JFrameUnidadT formUnidadT;
    private Listas list;
    private ControladorConsulSocio ctrlCSocio;

    public ControladorUnidadT(Listas lis) {
        list = lis;
        formUnidadT = new JFrameUnidadT();
        formUnidadT.agregarListener(this, this);
        formUnidadT.setVisible(true);
        Enabled(false);
        LlenarComboSocio();
        
    }

    //---------------------------------------
    //Funciona al hacer click en los botones
    //---------------------------------------
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formUnidadT.getBtnSalirUT())) {
            formUnidadT.dispose();
        }

        if (e.getSource().equals(formUnidadT.getBtnBuscarUT())) {
            new ControladorConsulUnidadT(list);
        }
        if (e.getSource().equals(formUnidadT.getBtnGuardarUT())) {
            Grabar();
        }
        if (e.getSource().equals(formUnidadT.getBtnEliminarUT())) {
            Limpiar();
            Enabled(false);
        }
        if (e.getSource().equals(formUnidadT.getCmbCapacidad())) {
            ComboCapacidad();
        }
        if (e.getSource().equals(formUnidadT.getCmbBuscarSocios())) {
            ComboSocios();
        }

    }

    //-------------------------------------------------------------
    //Funciona cuando se introduce un caracter en una caja de texto
    //-------------------------------------------------------------
    @Override
    public void keyTyped(KeyEvent e) {
        if (e.getSource().equals(formUnidadT.getTxtPlaca())) {
            PlacaKeyTyped(e);
        }
    }

    //-------------------------------------------------------------------------------
    //Funciona cuando se presiona una tecla que realiza alguna funcion, Ejemplo Enter
    //-------------------------------------------------------------------------------
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getSource().equals(formUnidadT.getTxtPlaca())) {
            PlacaKeyPressed(e);
        }
    }

    //----------------------------------------------
    //Funciona cuando se suelta una tecla
    //----------------------------------------------
    @Override
    public void keyReleased(KeyEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    //-----------------------------------------------
    //Ingresa un nuevo chofer en la lista de choferes
    //------------------------------------------------
    private void Grabar() {
        UnidadT Unidad = new UnidadT();
        String Cadena;

        Cadena = formUnidadT.getTxtPlaca().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Placa Vacia", "");
            formUnidadT.getTxtPlaca().requestFocusInWindow();
            return;
        }

        Cadena = formUnidadT.getTxtDescripcion().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Descripcion Vacia", "");
            formUnidadT.getTxtDescripcion().requestFocusInWindow();
            return;
        }

        Cadena = formUnidadT.getCmbCapacidad().toString();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Capacidad Vacia", "");
            formUnidadT.getCmbCapacidad().requestFocusInWindow();
            return;
        }

        Cadena = formUnidadT.getTxtCodCooperativa().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Codigo de Cooperativa vacio", "");
            formUnidadT.getTxtCodCooperativa().requestFocusInWindow();
            return;
        }

        Cadena = formUnidadT.getTxtCISocio().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Codigo de Cooperativa vacio", "");
            formUnidadT.getTxtCodCooperativa().requestFocusInWindow();
            return;
        }

        Unidad.UnidadT(formUnidadT.getTxtPlaca().getText(),
                formUnidadT.getTxtDescripcion().getText(),
                Integer.parseInt(formUnidadT.getCmbCapacidad().getSelectedItem().toString()),
                formUnidadT.getTxtCISocio().getText(),
                formUnidadT.getTxtCodCooperativa().getText());

        list.getListaUnidadT().add(Unidad);
        Mensajes.Aviso("Unidad de Transporte guardado con exito", "");
        Limpiar();
        Enabled(false);
        formUnidadT.getTxtPlaca().requestFocusInWindow();
    }

    private void Limpiar() {
        formUnidadT.getTxtPlaca().setText("");
        formUnidadT.getTxtDescripcion().setText("");
        formUnidadT.getTxtCISocio().setText("");
        formUnidadT.getTxtCodCooperativa().setText("");
        formUnidadT.getCmbCapacidad().setSelectedIndex(-1);
        formUnidadT.getTxtPlaca().requestFocusInWindow();
        formUnidadT.getCmbBuscarSocios().setSelectedIndex(-1);
    }

    //-----------------------
    private void Enabled(boolean Status) {
        formUnidadT.getTxtPlaca().setEnabled(!Status);
        formUnidadT.getCmbCapacidad().setEnabled(Status);
        formUnidadT.getCmbBuscarSocios().setEnabled(Status);
    }

    private void ComboCapacidad() {
        int pos;
        pos = formUnidadT.getCmbCapacidad().getSelectedIndex();
        switch (pos) {
            case 0:
                formUnidadT.getTxtDescripcion().setText("Rapidito");
                break;
            case 1:
                formUnidadT.getTxtDescripcion().setText("Ranchera");
                break;
            case 2:
                formUnidadT.getTxtDescripcion().setText("Van");
                break;
            case 3:
                formUnidadT.getTxtDescripcion().setText("Buseta");
                break;
            case 4:
                formUnidadT.getTxtDescripcion().setText("Buseta");
                break;
            case 5:
                formUnidadT.getTxtDescripcion().setText("Bus");
                break;
            case 6:
                formUnidadT.getTxtDescripcion().setText("Bus");
                break;
        }
        formUnidadT.getCmbBuscarSocios().requestFocusInWindow();
    }

    private void LlenarComboSocio() {
        formUnidadT.getCmbBuscarSocios().removeAllItems();
        formUnidadT.getCmbBuscarSocios().addItem("Seleccione");
        String datoSocio;
        for (int i = 0; i < list.getListaSocio().size(); i++) {
            datoSocio = "CI: " + list.getListaSocio().get(i).getCedula() + " " + list.getListaSocio().get(i).getNombre();
            formUnidadT.getCmbBuscarSocios().addItem(datoSocio);
        }
        formUnidadT.getCmbBuscarSocios().setSelectedIndex(0);
    }

    private void ComboSocios() 
    {
        if (formUnidadT.getCmbBuscarSocios().getSelectedIndex() > 0) {
            String dato, cedula;
            String[] arrSocio;
            dato = formUnidadT.getCmbBuscarSocios().getSelectedItem().toString();
            arrSocio = dato.split(" ");
            cedula = arrSocio[1];
            int pos = -1;
            for (int i = 0; i < list.getListaSocio().size(); i++) {
                if (list.getListaSocio().get(i).getCedula().equals(cedula)) {
                    pos = i;
                }
            }
            if (pos != -1) {
                formUnidadT.getTxtCISocio().setText(list.getListaSocio().get(pos).getCedula());
                formUnidadT.getTxtCodCooperativa().setText(list.getListaSocio().get(pos).getCodCoop());
            } else {
                formUnidadT.getTxtCISocio().setText("");
                formUnidadT.getTxtCodCooperativa().setText("");
            }
        }
    }

    private void PlacaKeyTyped(KeyEvent e) {
        String Cadena;
        Character Caracter;

        Cadena = formUnidadT.getTxtPlaca().getText();
        if (Cadena.length() == 8) {
            e.consume();
        } else {
            Caracter = e.getKeyChar();
            if (Caracter == '.') {
                e.consume();
            } else if (Character.isLetter(Caracter)) {
                e.setKeyChar(Character.toUpperCase(Caracter));
            }

        }
    }

    private void PlacaKeyPressed(KeyEvent e) {
        String Cadena;
        int PosiUnidad;
        UnidadT Unidad = new UnidadT();
        Cadena = formUnidadT.getTxtPlaca().getText();

        if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 8) {
            Mensajes.Aviso("Placa invalida", "");
            formUnidadT.getTxtPlaca().requestFocusInWindow();
        }
        if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 8) {

            PosiUnidad = ExisteUnidad(Cadena);
            if (PosiUnidad >= 0) {
                Unidad = list.getListaUnidadT().get(PosiUnidad);
                formUnidadT.getTxtPlaca().setText(Unidad.getPlaca());
                formUnidadT.getTxtDescripcion().setText(Unidad.getDescripcion());
                formUnidadT.getCmbCapacidad().setSelectedItem(Unidad.getCapacidad());
                formUnidadT.getTxtCISocio().setText(Unidad.getCISocio());
                formUnidadT.getTxtCodCooperativa().setText(Unidad.getCodCooperativa());

                Mensajes.Aviso("Unidad de Transporte ya Existe", "");
                Limpiar();

            } else {
                Enabled(true);
                formUnidadT.getCmbCapacidad().requestFocusInWindow();

            }
        }

    }

    private int ExisteUnidad(String PlaUT) {
        int i = 0, Posi = -1;

        UnidadT Unidad;
        String PlaLista;

        for (i = 0; i < list.getListaUnidadT().size(); i++) {
            Unidad = list.getListaUnidadT().get(i);

            PlaLista = Unidad.getPlaca();

            if (PlaLista.equals(PlaUT)) {
                Posi = i;
                return Posi;
            }

        }

        return Posi;
    }

}
